package portal.web.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import portal.entidades.Compra;
import portal.entidades.CompraEstado;
import portal.entidades.ItemCompra;
import portal.entidades.Usuario;
import portal.util.config.ConfigUtil;
import portal.web.delegate.IPortalWebDelegate;
import portal.web.delegate.PortalWebDelegate;

/**
 * Servlet implementation class RecoverOrCreateCart
 */
@WebServlet("/Compras/ComprarRecoverOrCreateCart")
public class ComprarRecoverOrCreateCart extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public ComprarRecoverOrCreateCart() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		IPortalWebDelegate app = PortalWebDelegate.getInstanace();
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		String message = "";
		String tr = "";
		List<Compra> compras = null;
		String codigoA = "";
		String productoTd = "";
		String nombreTd = "";
		String precioTd = "";
		String cantidad = "";

		// recupero el usuario de la session
		Usuario usuario = (Usuario) request.getSession()
				.getAttribute("usuario");

		// busco mi compra si es que existe

		if (usuario != null) {

			// Traigo mis compras y me fijo si existe una con mi usuario y con
			// el estado 'CARRITO'
			compras = app.listarMisCompras(usuario.getId());

			boolean encontre = false;
			Compra compra = new Compra();

			for (Compra c : compras) {
				if (c.getEstado().equalsIgnoreCase(
						CompraEstado.CARRITO.getEstado())) {
					compra = c;
					encontre = true;
					break;
				}
			}

			if (encontre) {
				// si encontre mi compra con el estado CARRITO dibujo la
				// respuesta.

				for (int i = 0; i < compra.getItems().size(); i++) {
					ItemCompra itc = compra.getItems().get(i);
					codigoA = itc.getArticulo().getIdProducto().toString();
					productoTd = "<img src='../images/productos/"
							+ codigoA
							+ ".jpg' alt='"
							+ codigoA
							+ ".jpg' width='40px' height='40px' align='middle' />";
					nombreTd = "nombre: " + itc.getArticulo().getNombre()
							+ "<br/>" + "marca: "
							+ itc.getArticulo().getMarca();

					double precio = itc.getArticulo().getPrecio()
							* itc.getCantidad();
					String fmt = String.format("%.3f", precio);
					precioTd = String.valueOf(new Double(fmt.replace(",",".")));
					cantidad = String.valueOf(itc.getCantidad());

					tr += "<tr><td>"
							+ codigoA
							+ "</td><td width=51px>"
							+ productoTd
							+ "</td><td width=80px>"
							+ nombreTd
							+ "</td><td><input type='text' value="
							+ cantidad
							+ " class='cantidad' readonly style='width: 40px'/></td><td width=60px>"
							+ precioTd
							+ "</td><td class='eliminar'><img alt='' src='../images/icon_minus.png'></td></tr>";
				}

				// envio los items para ser re dibujados por el cliente.
				out.println(compra.getId().intValue() + "|" + tr);
			} else {
				// si no encontre mi compra con el estado CARRITO entontes creo
				// una nueva.
				Compra c_nva = new Compra();
				c_nva.setIdModulo(ConfigUtil.getInstance().get("MODULO_ID"));
				c_nva.setUsuario(usuario);
				c_nva.setEstado(CompraEstado.CARRITO.getEstado());
				c_nva.setMontoTotal(0);
				c_nva.setCordenadaX(usuario.getCordenadaX());
				c_nva.setCordenadaY(usuario.getCordenadaY());
				SimpleDateFormat dateFormat = new SimpleDateFormat(
						"yyyy-MM-dd HH:mm:ss");
				
				c_nva.setFecha(dateFormat.format(new Date()));
				// mejorar menejo de errores
				c_nva = app.crearCompra(c_nva);
				out.println(c_nva.getId().intValue() + "|" + tr);
			}

		} else {
			message = "El usuario no se encuentra en la session, ingrese nuevamente al sistema";
			request.setAttribute("message", message);
			response.sendRedirect("index.jsp");
		}

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}
